home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 26.zip / BS1 part 26 / The Director Toolkit v1.0.adf / Programs / MIDImod / mididemo < prev    next >
Text File  |  1987-02-25  |  3KB  |  112 lines

  1.  
  2.      rem   midi sound module test example
  3.  
  4.      rem  When you run, wait until all disk activity stops, then 
  5.      rem  it should respond to MIDI note commands on channel 1
  6.  
  7.      rem  first, we create an array big enough to hold a note period table
  8.      rem  and note number to sample-buffer table
  9.  
  10.  
  11. rem  make sure we can find the midi module
  12.      execute a,"assign mod: toolkit:options"
  13.  
  14.      array 200,2
  15.  
  16.      rem  now setup the pics
  17.      rem  create pics 1-4 by blitting from loaded pic in 5
  18.  
  19.      setblack 1
  20.      load 5,"flash5.pic"
  21.      new 1,5
  22.      display 1
  23.      blit 5,29,14,29,14,153,105
  24.      new 2,5
  25.      display 2
  26.      blit 5,198,0,158,20,153,133
  27.      new 3,5
  28.      display 3
  29.      blit 5,49,120,49,100,157,119
  30.      new 4,5
  31.      display 4
  32.      blit 5,209,134,169,94,142,105
  33.  
  34.      rem  don't need original pic anymore
  35.      free 5
  36.  
  37.      rem  loadup the sound samples
  38.      module "midi"
  39.      sound perioda,"load",1,0,"ToolKit:sounds/hammer1.snd"
  40.      sound periodb,"load",2,0,"ToolKit:sounds/switch.snd"
  41.      sound periodc,"load",3,0,"ToolKit:sounds/mtcymb.snd"
  42.      sound periodd,"load",4,0,"ToolKit:sounds/snare.snd"
  43.  
  44.      rem  setup midi
  45.      sound a,"midi",1,1
  46.  
  47.      position -1,-1:rem   adjust for overscan
  48.  
  49.      rem  setup a default period in the notetable
  50.      for i=0 to 99:@(i) = perioda:@(i+100)=1:next
  51.  
  52.      rem build table of note sample-periods in the array from 0-99
  53.  
  54.      i = 42:rem  starting location for this octave
  55.      @(i) = 508
  56.      i=i+1:@(i) = 480
  57.      i=i+1:@(i) = 453
  58.      i=i+1:@(i) = 428
  59.      i=i+1:@(i) = 404
  60.      i=i+1:@(i) = 381
  61.      i=i+1:@(i) = 360
  62.      i=i+1:@(i) = 339
  63.      i=i+1:@(i) = 320
  64.      i=i+1:@(i) = 302
  65.      i=i+1:@(i) = 285
  66.      i=i+1:@(i) = 269
  67.      i=i+1
  68.  
  69.      rem  generate upper two octaves
  70.      for i=i to i+24
  71.          @(i)=@(i-12)/2
  72.      next
  73.  
  74.      rem  generate lower octaves
  75.      for i=41 to 0
  76.          @(i)=@(i+12)*2
  77.      next
  78.  
  79. rem  fill the note table with sound buffer numbers
  80.      for i=100 to 199
  81.          @(i)=1+i%4
  82.      next
  83.  
  84.  
  85. rem  now trigger on midi notes
  86. 10     sound note,"wait"
  87.      velo = note/512:rem  convert to 0-63 volume from 0-128 velocity info
  88.      note = note%256
  89.  
  90.      if velo        :rem  a note on
  91.  
  92.          rem  play sample and display image selected by  @(100+note)
  93.          rem  with sample period selected by @(note)
  94.          b = @(100+note)
  95.          sound a,"play",b,1,velo-1,@(note)
  96.  
  97.          display b
  98.  
  99.          rem  randomly colorize the image
  100.          for i=1 to 3
  101.              color -1,1,i,1+?15,1+?15,1+?15
  102.          next
  103.  
  104.          setblack 0
  105.          goto 10
  106.  
  107.      else        :rem  a note off
  108.          setblack 1
  109.          goto 10
  110.      endif
  111.  
  112.